"""
02 - Python 数据类型
与 Java 的主要差异：
1. 动态类型系统
2. 更多内置数据类型
3. 灵活的数值类型
"""

print("=== Python 数据类型 ===")

# 1. 数值类型
print("\n--- 数值类型 ---")

# 整数 (int)
integer_num = 42
big_integer = 123456789012345678901234567890  # Python 支持大整数
print(f"整数: {integer_num}, 类型: {type(integer_num)}")
print(f"大整数: {big_integer}, 类型: {type(big_integer)}")

# 浮点数 (float)
float_num = 3.14159
scientific_notation = 2.5e-3  # 0.0025
print(f"浮点数: {float_num}, 类型: {type(float_num)}")
print(f"科学计数法: {scientific_notation}")

# 复数 (complex)
complex_num = 3 + 4j
print(f"复数: {complex_num}, 类型: {type(complex_num)}")
print(f"实部: {complex_num.real}, 虚部: {complex_num.imag}")

# 2. 布尔类型
print("\n--- 布尔类型 ---")
is_true = True
is_false = False
print(f"True: {is_true}, 类型: {type(is_true)}")
print(f"False: {is_false}, 类型: {type(is_false)}")

# 布尔运算
print(f"True and False: {True and False}")
print(f"True or False: {True or False}")
print(f"not True: {not True}")

# 3. 字符串类型
print("\n--- 字符串类型 ---")

# 字符串创建
single_quote = '单引号字符串'
double_quote = "双引号字符串"
triple_quote = """三引号字符串
可以跨越多行"""
print(single_quote)
print(double_quote)
print(triple_quote)

# 字符串操作
text = "Hello Python"
print(f"原始字符串: {text}")
print(f"长度: {len(text)}")
print(f"大写: {text.upper()}")
print(f"小写: {text.lower()}")
print(f"首字母大写: {text.capitalize()}")
print(f"查找 'Python': {text.find('Python')}")
print(f"替换: {text.replace('Python', 'World')}")

# 字符串索引和切片
print(f"第一个字符: {text[0]}")
print(f"最后一个字符: {text[-1]}")
print(f"前5个字符: {text[:5]}")
print(f"第6到最后一个字符: {text[6:]}")
print(f"第3到第8个字符: {text[2:8]}")

# 字符串格式化
name = "Alice"
age = 25
score = 95.5

# 三种格式化方式
# print("1. %s 格式化: 姓名: %s, 年龄: %d, 分数: %.1f" % (name, age, score))
print("2. format 格式化: 姓名: {}, 年龄: {}, 分数: {:.1f}".format(name, age, score))
print(f"3. f-string 格式化: 姓名: {name}, 年龄: {age}, 分数: {score:.1f}")

# 4. None 类型
print("\n--- None 类型 ---")
empty_value = None
print(f"None: {empty_value}, 类型: {type(empty_value)}")
print(f"None == None: {None == None}")
print(f"None is None: {None is None}")

# 5. 类型转换
print("\n--- 类型转换 ---")
str_num = "123"
int_num = int(str_num)
float_num = float(str_num)
bool_val = bool(1)

print(f"字符串 '{str_num}' 转整数: {int_num}, 类型: {type(int_num)}")
print(f"字符串 '{str_num}' 转浮点数: {float_num}, 类型: {type(float_num)}")
print(f"整数 1 转布尔值: {bool_val}, 类型: {type(bool_val)}")

# 6. 类型检查
print("\n--- 类型检查 ---")
value = "Hello"
print(f"值: {value}")
print(f"是字符串吗? {isinstance(value, str)}")
print(f"是整数吗? {isinstance(value, int)}")
print(f"类型: {type(value)}")

# 7. 与 Java 对比
print("\n--- 与 Java 对比 ---")
"""
Java 数据类型对比:

// 数值类型
int integerNum = 42;
long bigInteger = 1234567890123456789L;  // 需要加 L
double floatNum = 3.14159;
float singlePrecision = 3.14f;           // 需要加 f

// 布尔类型
boolean isTrue = true;
boolean isFalse = false;

// 字符串
String text = "Hello Java";
char singleChar = 'A';

// 类型转换
int num = Integer.parseInt("123");
double d = Double.parseDouble("123.45");

// 输出
System.out.println("姓名: " + name + ", 年龄: " + age);
"""

if __name__ == "__main__":
    print("\n=== 数据类型学习完成 ===")